home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1999 November / Macworld (1999-11).dmg / Updaters / WhiteCap 3.0.4 / WhiteCap Source.sit / WhiteCap Source / Common / math / ExprArray.cpp < prev    next >
C/C++ Source or Header  |  1999-07-13  |  909b  |  63 lines

  1. #include "ExprArray.h"
  2.  
  3. #include "ExpressionDict.h"
  4. #include "ArgList.h"
  5. #include "Expression.h"
  6.  
  7.  
  8. ExprArray::ExprArray() {
  9.     mExprs = NULL;
  10.     mNumExprs = 0;
  11. }
  12.  
  13.  
  14.  
  15.  
  16. ExprArray::~ExprArray() {
  17.  
  18.     if ( mExprs )
  19.         delete []mExprs;
  20. }
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27. void ExprArray::Compile( const ArgList& inArgs, long inID, ExpressionDict& ioDict ) {
  28.     UtilStr str, IDStr;
  29.     unsigned long i;
  30.     
  31.     mNumExprs = inArgs.GetArraySize( inID );
  32.     
  33.     if ( mExprs )
  34.         delete []mExprs;
  35.         
  36.     mExprs = new Expression[ mNumExprs + 1 ];
  37.     
  38.     i = inID;
  39.     while ( i > 0 ) {
  40.         IDStr.Prepend( (char) ( i & 0xFF ) );
  41.         i = i >> 8;
  42.     }
  43.     
  44.     for ( i = 0; i < mNumExprs; i++ ) {
  45.         str.Assign( IDStr );
  46.         str.Append( (long) i );
  47.         mVals[ i ] = 0;
  48.         ioDict.AddVar( str, &mVals[ i ] );
  49.         inArgs.GetArg( inID, str, i );
  50.         mExprs[ i ].Compile( str, ioDict );
  51.     }
  52. }
  53.  
  54.  
  55. void ExprArray::Evaluate() {
  56.     int i;
  57.     
  58.     for ( i = 0; i < mNumExprs; i++ )
  59.         mVals[ i ] = mExprs[ i ].Evaluate();
  60. }
  61.  
  62.  
  63.